package cn.ffcs.bpmpvc.dao;

import java.util.List;
import java.util.Map;

import org.echoice.paper.PageBean;

import cn.ffcs.bpm.model.DateControl;
import cn.ffcs.bpm.model.Report;
import cn.ffcs.bpmpvc.model.BpmAppInfo;
import cn.ffcs.bpmpvc.svc.DateManager;
import cn.ffcs.bpmpvc.web.forms.FlowReqReportForm;
import cn.ffcs.bpmpvc.web.forms.FlowTaskForm;
import cn.ffcs.businessrequest.model.BusinessReason;
import cn.ffcs.businessrequest.model.BusinessRequest;
import cn.ffcs.businessrequest.model.ProdAdvReq;
import cn.ffcs.businessrequest.model.ReqDelay;
import cn.ffcs.businessrequest.model.ReqDocu;
import cn.ffcs.businessrequest.model.ReqProgress;
import cn.ffcs.organ.model.Organization;
import cn.ffcs.organ.model.Person;
import cn.ffcs.security.model.User;
import cn.ffcs.system.dict.model.Dict;

public interface AppBusinessReqDao 
{
	/**
	 * 
	 * @param procinstId
	 * @return
	 */
	public BpmAppInfo getBpmAppInfo(String procinstId);
	/**
	 * 按类型和部门统计需求单
	 * @param flowReqReportForm
	 * @return
	 */
	public List<List<String>> listSumRequest(FlowReqReportForm flowReqReportForm);
	/**
	 * 获取所有部门简称
	 * @return
	 */
	public List<String> getAllShortName();
	/**
	 * 查找本周或本月已填写的周报或月报
	 * @param type
	 * @return
	 */
	public List<Report> findNowOverReport(String type);
	/**
	 * 取配置周报或月报的需求单
	 * @param type
	 * @return
	 */
	public List<BusinessRequest> findWeekSetBsReq(String type);
	/**
	 * 判断当前时间是本年中的第几周，并返回
	 * @return
	 */
	public int weekNum();
	/**
	 * 删除时间管控类
	 * @param reqId
	 */
	public void deleteDateControlByReqId(String reqId);
	/**
	 * 通过reqId查询所有时间管控类
	 * @param reqId
	 * @return
	 */
	public List<DateControl> findDateContolByReqId(String reqId);
	/**
	 * 取周报或月报
	 * @param id
	 * @return
	 */
	public Report getReportById(Integer id);
	/**
	 * 取最近一次周报，月报
	 * @param reqId
	 * @param type
	 * @return
	 */
	public Report getLastReport(String reqId,String type);
	/**
	 * 查看报表详细列表
	 * @param reqId
	 * @param type
	 * @return
	 */
	public List<Report> reportList(String reqId,String type);
	/**
	 * 需要填写的周报/月报
	 * @param type
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public PageBean queryPageNeedWeek(FlowReqReportForm flowReqReportForm,User user,String type,int pageNo,int pageSize) ;
	/**
	 * 周报月报
	 * @param flowReqReportForm
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public PageBean queryPageWeekReportList(FlowReqReportForm flowReqReportForm, int pageNo, int pageSize) ;
	/**
	 * 获取不同类型的已完成需求单(大类)
	 * @param sql
	 * @param size
	 * @return
	 */
	public List<Map<String, String>> getDaiTypes(String procinst_type);
	/**
	 * 获取不同类型的已完成需求单
	 * @param sql
	 * @param size
	 * @return
	 */
	public List<List<String>> listOverBs(String sql,final int size,final int num);
	/**
	 * 获取需求单报表统计结果
	 * @param sql
	 * @return
	 */
	public List<List<String>> listSumBs(String sql,final int n,final int num);
	/**
	 * 获取需求单表中的所有需求类型
	 * @param procinst_type
	 * @return
	 */
	public List<Map<String, String>> getTypes(String procinst_type);
	/**
	 * 根据姓名查找产品经理
	 * @param name
	 * @return
	 */
	public Person getPerson(String name);
    /**
     * 根据类型取数据字典信息
     * TODO 请输入方法说明
     * @param type
     * @return
     */
    public List<Dict> findDict(String type);
    /**
     * 根据名称查找字典信息值
     * @param name
     * @return
     */
    public Dict getDict(String name);
    /**
     * 保存记录
     * TODO 请输入方法说明
     * @param obj
     */
    public void save(Object obj);
    /**
     * 取得组织结构信息
     * TODO 请输入方法说明
     * @param personId
     * @return
     */
    public Organization getOrgByPerson(Integer personId);
    /**
     * 根据ID得到用户信息
     * TODO 请输入方法说明
     * @param personId
     * @return
     */
    public Person getPerson(Integer personId);
    /**
     * 取得业务需求单数据
     * TODO 请输入方法说明
     * @param procinstId
     * @return
     */
    public BusinessRequest getBusinessRequest(Integer procinstId);
    /**
     * 取得业务需求单数据
     * TODO 请输入方法说明
     * @param procinstId
     * @return
     */
    public BusinessRequest getBusinessRequestById(Integer id);
    /**
     * 得到业务中对应的已上传文档列表
     * TODO 请输入方法说明
     * @param id
     * @return
     */
    public List<ReqDocu> findDocuList(Integer id);
    /**
     * 得到业务中对应的已上传文档列表
     * @param ref_entity_id
     * @param ref_entity
     * @return
     */
    public List<ReqDocu> findDocuListByRefIdAndType(Integer ref_entity_id,String ref_entity);
	/**
	 * 删除对象
	 * @param object
	 */
    public void delete(Object object );
    /**
     * 根据Id号删除对应的附件
     * TODO 请输入方法说明
     * @param idArr
     */
    public void deleteDocuByIds(String idArr[]);
    /**
     * 根据Id号删除对应的附件
     * TODO 请输入方法说明
     * @param idArr
     */
    public void deleteDocContentByIds(String idArr[]);
    /**
     * 首面及统一代办任务
     * @param flowTaskForm
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageOaTaskList(FlowTaskForm flowTaskForm,int pageNo,int pageSize);
    /**
     * 
     * TODO 请输入方法说明
     * @param flowTaskForm
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageTaskList(FlowTaskForm flowTaskForm,int pageNo,int pageSize);
    /**
     * 查找进展信息
     * TODO 请输入方法说明
     * @param reqId
     * @return
     */
    public List<ReqProgress> findReqProgressList(Integer reqId);
    /**
     * 查找延迟信息
     * TODO 请输入方法说明
     * @param reqId
     * @return
     */
    public List<ReqDelay> findReqReqDelayList(Integer reqId);
    /**
     * 各节点管控时间与完成时间
     * @return
     */
    public List<DateManager> dateList();
    /**
     * 分页查询时间管控
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageBsReqReportList(User user,String reqName,int pageNo,int pageSize);
    /**
     * 分页查询所有待办单记录
     * @param flowTaskForm
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageAllBsReqList(FlowTaskForm flowTaskForm,int pageNo,int pageSize);
    /**
     * 分页查询需求交互单记录
     * @param businessRequest
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageBsReqList(FlowTaskForm flowTaskForm,int pageNo,int pageSize);
    /**
     * 查询审核需求单
     * @param prodAdvReq
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageProdAdvReqList(FlowTaskForm flowTaskForm,int pageNo,int pageSize);
    /**
     * 交互需求单审核报表
     * @param flowReqReportForm
     * @param pageNo
     * @param pageSize
     * @return
     */
    public PageBean queryPageBsReqReportList(FlowReqReportForm flowReqReportForm,int pageNo,int pageSize);
    /**
     * 得到需求交互单信息
     * @param procinstId
     * @return
     */
    public ProdAdvReq getProdAdvReq(Integer procinstId);
    /**
     * 根据主键ID，得到需求交互单信息
     * @param id
     * @return
     */
    public ProdAdvReq getProdAdvReqById(Integer id);
    
    /**
     * 
     * @param childAreq
     * @param opType
     * @return
     */
    public ProdAdvReq getProdAdvReq(String childAreq,String opType);
    /**
     * 根据需求单查找相应需求单
     * @param reqCode
     * @return
     */
    public ProdAdvReq getProdAdvReqByReqCode(String reqCode);
    /**
     * 根据任务记录Ids取得需求单工作汇报进展信息
     * @param taskIds
     * @return
     */
    public List<ReqProgress> findReqProgressListByTaskIds(String taskIds);
    /**
     * 有关优化需求审核数据迁移
     */
    public void tranferData();
    /**
     * 
     */
    public void tranferDataRefuse();
    /**
     * 通过组织机构Id取用户信息
     * @param orgId
     * @return
     */
    public List findPersonByOrg(Integer orgId);
    /**
     * 通过codeID取组织信息
     * @param codeId
     * @return
     */
    public Organization getOrganizationByCodeId(String codeId);
    /**
     * 查看流程结束原因操作记录
     * @param procInstId
     * @return
     */
    public BusinessReason findBusinessReason(String procInstId);
    /**
     * 根据组织ID及职责查找对应的人员信息
     * @param orgId
     * @param duty
     * @return
     */
    public List findPersonByOrg(Integer orgId,String duty);
    /**
     * 根据组织ID及职责查找对应的人员信息
     * @param orgId
     * @param dutyArr
     * @return
     */
    public List findPersonByOrg(Integer orgId,String dutyArr[]);
    /**
     * 通过标识取字典信息
     * @param keyValue
     * @return
     */
    public Dict getDictByKey(String keyValue);
    /**
     * 通知登名取用户信息
     * @param userID
     * @return
     */
    public Person getPersonByUserID(String userID);
}
